#ifndef __USER_INTERFACE_EXCEPTION_H
#define __USER_INTERFACE_EXCEPTION_H

#include <string>
#include <exception>

class UserInterfaceException : public std::exception
{
private:
    std::string errInfo;
public:
    UserInterfaceException() = default;
    UserInterfaceException(const std::string &info)
    {
        errInfo = info;
    }
    ~UserInterfaceException() = default;

    const char* what() const throw()
    {
        return errInfo.c_str();
    }
};

class EndOfInput : public UserInterfaceException
{
public:
    EndOfInput() : UserInterfaceException() {};
    EndOfInput(const std::string &info) : UserInterfaceException(info) {}
    ~EndOfInput() = default;
};

class UnfoundInstruction : public UserInterfaceException
{
public:
    UnfoundInstruction() : UserInterfaceException() {};
    UnfoundInstruction(const std::string &info) : UserInterfaceException(info) {}
    ~UnfoundInstruction() = default;
};

class BlankInput : public UserInterfaceException
{
public:
    BlankInput() : UserInterfaceException() {};
    BlankInput(const std::string &info) : UserInterfaceException(info) {}
    ~BlankInput() = default;
};
#endif